﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Gnosis.Babel.Constants
{
    #region CascadeActions

    public static class CascadeActions
    {
        public const string Cascade = "CascadeActions.Cascade";
        public const string NoAction = "CascadeActions.NoAction";
        public const string Restrict = "CascadeActions.Restrict";
        public const string SetDefault = "CascadeActions.SetDefault";
        public const string SetNull = "CascadeActions.SetNull";
        public const string Type = "CascadeActions.Type";
        
    }

    #endregion

    #region ColumnConstraints

    public static class ColumnConstraints
    {
        public const string PrimaryKey = "ColumnConstraints.PrimaryKey";
        public const string Type = "ColumnConstraints.Type";
    }

    #endregion

    #region ConflictClauses

    public static class ConflictClauses
    {
        public const string Abort = "ConflictClauses.Abort";
        public const string Fail = "ConflictClauses.Fail";
        public const string Ignore = "ConflictClauses.Ignore";
        public const string Replace = "ConflictClauses.Replace";
        public const string Rollback = "ConflictClauses.Rollback";
        public const string Type = "ConflictClauses.Type";
    }

    #endregion

    #region Constraints

    public static class Constraints
    {
        public const string PrimaryKey = "Constraints.PrimaryKey";
        public const string CandidateKey = "Constraints.CandidateKey";
        public const string Default = "Constraints.Default";
        public const string ForeignKey = "Constraint.ForeignKey";
        public const string NotNull = "Constraints.NotNull";
        public const string Type = "Constraints.Type";
    }

    #endregion

    #region CompoundOperators

    public static class CompoundOperators
    {
        public const string Except = "CompoundOperators.Except";
        public const string Intersect = "CompoundOperators.Intersect";
        public const string Type = "CompoundOperators.Type";
        public const string Union = "CompoundOperators.Union";
        public const string UnionAll = "CompoundOperators.UnionAll";
    }

    #endregion

    #region Defaults

    public static class Defaults
    {
        //public static readonly IIdentifier Id = Identifier.Emtpty;
        public const string Name = "";
    }

    #endregion

    #region DeferralActions

    public static class DeferralActions
    {
        public const string Deferrable = "DeferralActions.Deferrable";
        public const string InitiallyDeferred = "DeferralActions.InitiallyDeferred";
        public const string InitiallyImmediate = "DeferralActions.InitiallyImmediate";
        public const string NotDeferrable = "DeferralActions.NotDeferrable";
        public const string Type = "DeferralActions.Type";
    }

    #endregion

    #region Errors

    public static class Errors
    {
        public const string Abort = "Errors.Abort";
        public const string Fail = "Errors.Fail";
        public const string Ignore = "Errors.Ignore";
        public const string Message = "Errors.Message";
        public const string RaiseType = "Errors.RaiseType";
        public const string Rollback = "Errors.Rollback";
    }

    #endregion

    #region Expressions

    public static class Expressions
    {
        public const string AbsoluteValue = "Expressions.AbsoluteValue";
        public const string Add = "Expressions.Add";
        public const string And = "Expressions.And";
        public const string AsAlias = "Expressions.AsAlias";
        public const string Average = "Expressions.Average";
        public const string Between = "Expressions.Between";
        public const string BitwiseAnd = "Expressions.BitwiseAnd";
        public const string BitwiseComplement = "Expressions.BitwiseComplement";
        public const string BitwiseOr = "Expressions.BitwiseOr";
        public const string CascadeAction = "Expressions.CascadeAction";
        public const string Case = "Expressions.Case";
        public const string Cast = "Expressions.Cast";
        public const string Changes = "Expressions.Changes";
        public const string Coalesce = "Expressions.Coalesce";
        public const string Collate = "Expressions.Colate";
        public const string CollationName = "Expressions.CollationName";
        public const string ColumnCheck = "Expressions.CollumnCheck";
        public const string ColumnCollate = "Expressions.ColumnCollate";
        public const string ColumnDefault = "Expressions.ColumnDefault";
        public const string ColumnDefinition = "Expressions.ColumnDefinition";
        public const string ColumnName = "Expressions.ColumnName";
        public const string ColumnNotNull = "Expressions.ColumnNotNull";
        public const string ColumnPrimaryKey = "Expressions.ColumnPrimaryKey";
        public const string ColumnValue = "Expressions.ColumnValue";
        public const string Concatenate = "Expressions.Concatenate";
        public const string ConflictClause = "Expressions.ConflictClause";
        public const string Count = "Expressions.Count";
        public const string DatabaseName = "Expressions.DatabaseName";
        public const string DateTimeFormat = "Expressions.DateTimeFormat";
        public const string DayOfMonth = "Expressions.DayOfMonth";
        public const string DayOfWeek = "Expressions.DayOfWeek";
        public const string DeferralAction = "Expressions.DeferralAction";
        public const string Divide = "Expressions.Divide";
        public const string Else = "Expressions.Else";
        public const string EqualTo = "Expressions.EqualTo";
        public const string Exists = "Expressions.Exists";
        public const string ForeignTable = "Expressions.ForeignTable";
        public const string Glob = "Expressions.Glob";
        public const string GreaterThan = "Expressions.GreaterThan";
        public const string GreaterThanOrEqualTo = "Expressions.GreaterThanOrEqualTo";
        public const string GroupBy = "Expressions.GroupBy";
        public const string GroupConcatenate = "Expressions.GroupConcatenate";
        public const string Having = "Expressions.Having";
        public const string Hour = "Expressions.Hour";
        public const string IfNull = "Expressions.IfNull";
        public const string In = "Expressions.In";
        public const string IndexedColumn = "Expressions.IndexedColumn";
        public const string Is = "Expressions.Is";
        public const string IsNot = "Expressions.IsNot";
        public const string IsNull = "Expressions.IsNull";
        public const string JoinConstraint = "Expressions.JoinConstraint";
        public const string JoinSource = "Expressions.JoinSource";
        public const string LastInsertRowId = "Expressions.LastInsertRowId";
        public const string LeftTrim = "Expressions.LeftTrim";
        public const string LessThan = "Expressions.LessThan";
        public const string LessThanOrEqualTo = "Expressions.LessThanOrEqualTo";
        public const string Like = "Expressions.Like";
        public const string Literal = "Expressions.Literal";
        public const string Match = "Expressions.Match";
        public const string Maximum = "Expressions.Maximum";
        public const string Millisecond = "Expressions.Millisecond";
        public const string Minimum = "Expressions.Minimum";
        public const string Minute = "Expressions.Minute";
        public const string Modulus = "Expressions.Modulus";
        public const string Month = "Expressions.Month";
        public const string Multiply = "Expressions.Multiply";
        public const string Negative = "Expressions.Negative";
        public const string Not = "Expressions.Not";
        public const string NotEqualTo = "Expressions.NotEqualTo";
        public const string NotNull = "Expressions.NotNull";
        public const string NullIf = "Expressions.NullIf";
        public const string OfColumns = "Expressions.OfColumns";
        public const string On = "Expressions.On";
        public const string OnDelete = "Expressions.OnDelete";
        public const string OnUpdate = "Expressions.OnUpdate";
        public const string Or = "Expressions.Or";
        public const string OrderBy = "Expressions.OrderBy";
        public const string OrderingTerm = "Expressions.OrderingTerm";
        public const string Parameter = "Expressions.Parameter";
        public const string Parenthetical = "Expressions.Parenthetical";
        public const string Positive = "Expressions.Positive";
        public const string Quote = "Expressions.Quote";
        public const string Raise = "Expressions.Raise";
        public const string Random = "Expressions.Random";
        public const string RandomBlob = "Expressions.RandomBlob";
        public const string RegExp = "Expressions.RegExp";
        public const string Replace = "Expressions.Replace";
        public const string ResultColumn = "Expressions.ResultColumn";
        public const string RightTrim = "Expressions.RightTrim";
        public const string Round = "Expressions.Round";
        public const string Second = "Expressions.Second";
        public const string SelectCore = "Expressions.SelectCore";
        public const string Separator = "Expressions.Separator";
        public const string Set = "Expressions.Set";
        public const string ShiftLeft = "Expressions.ShiftLeft";
        public const string ShiftRight = "Expressions.ShiftRight";
        public const string SingleSource = "Expressions.SingleSource";
        public const string Soundex = "Expressions.Soundex";
        public const string StringFromTime = "Expressions.StringFromTime";
        public const string Substring = "Expressions.Substring";
        public const string Subtract = "Expressions.Subtract";
        public const string Sum = "Expressions.Sum";
        public const string TableCheck = "Expressions.TableCheck";
        public const string TableForeignKey = "Expressions.TableForeignKey";
        public const string TableName = "Expressions.TableName";
        public const string TablePrimaryKey = "Expressions.TablePrimaryKey";
        public const string TableUniqueKey = "Expressions.TableUniqueKey";
        public const string ToDate = "Expessions.ToDate";
        public const string ToDateTime = "Expressions.ToDateTime";
        public const string ToHexadecimal = "Expressions.ToHexadecimal";
        public const string ToJulianDay = "Expressions.ToJulianDay";
        public const string ToLower = "Expressions.ToLower";
        public const string Total = "Expressions.Total";
        public const string TotalChanges = "Expressions.TotalChanges";
        public const string ToTime = "Expressions.ToTime";
        public const string ToUpper = "Expressions.ToUpper";
        public const string TriggerName = "Expressions.TriggerName";
        public const string TriggerStatement = "Expressions.TriggerStatement";
        public const string TriggerWhen = "Expressions.TriggerWhen";
        public const string Trim = "Expressions.Trim";
        public const string Type = "Expressions.Type";
        public const string TypeName = "Expressions.TypeName";
        public const string TypeOf = "Expressions.TypeOf";
        public const string Version = "Expressions.Version";
        public const string When = "Expressions.When";
        public const string Where = "Expressions.Where";
        public const string Year = "Expressions.Year";
        public const string ZeroBlob = "Expressions.ZeroBlob";
    }

    #endregion

    #region Indexes

    public static class Indexes
    {
        public const string NotUnique = "Indexes.NotUnique";
        public const string Type = "Indexes.Type";
        public const string Unique = "Indexes.Unique";
    }

    #endregion

    #region Joins

    public static class JoinOperators
    {
        public const string Cross = "Joins.Cross";
        public const string Inner = "Joins.Inner";
        public const string Left = "Joins.Left";
        public const string LeftOuter = "Joins.LeftOuter";
        public const string Natural = "Joins.Natural";
        public const string Outer = "Joins.Outer";
        public const string Type = "Joins.Type";
    }

    #endregion

    #region Options

    public static class Options
    {
        public const string Alias = "Options.Alias";
        public const string All = "Options.All";
        public const string AutoIncrement = "Options.AutoIncrement";
        public const string Child = "Options.Child";
        public const string DataType = "Options.DataType";
        public const string Distinct = "Options.Distinct";
        public const string Escape = "Options.Escape";
        public const string IfNotExists = "Options.IfNotExists";
        public const string Limit = "Options.Limit";
        public const string Offset = "Options.Offset";
        public const string Temporary = "Options.Temporary";
        public const string Unique = "Options.Unique";
        public const string Value = "Options.Value";
    }

    #endregion

    #region OrderingTerms

    public static class OrderingTerms
    {
        public const string Ascending = "OrderingTerms.Ascending";
        public const string Descending = "OrderingTerms.Descending";
        public const string Type = "OrderingTerms.Type";
    }

    #endregion

    #region Statements

    public static class Statements
    {
        public const string Constraint = "Statements.Constraint";
        public const string Database = "Statements.Database";
        public const string Delete = "Statements.Delete";
        public const string Index = "Statements.Index";
        public const string Insert = "Statements.Insert";
        public const string Select = "Statements.Select";
        public const string Table = "Statements.Table";
        public const string Trigger = "Statements.Trigger";
        public const string Type = "Statements.Type";
        public const string Update = "Statements.Update";
        public const string View = "Statements.View";
    }

    #endregion

    public static class Temp
    {
        public const string Columns = "Temp.Columns";
        public const string ForeignColumns = "Temp.ForeignColumns";
        public const string ForeignTable = "Temp.ForeignTable";
    }

    #region Triggers

    public static class Triggers
    {
        public const string AfterDelete = "Triggers.AfterDelete";
        public const string AfterInsert = "Triggers.AfterInsert";
        public const string AfterUpdate = "Triggers.AfterUpdate";
        public const string BeforeDelete = "Triggers.BeforeDelete";
        public const string BeforeInsert = "Triggers.BeforeInsert";
        public const string BeforeUpdate = "Triggers.BeforeUpdate";
        public const string InsteadOfDelete = "Triggers.InsteadOfDelete";
        public const string InsteadOfInsert = "Triggers.InsteadOfInsert";
        public const string InsteadOfUpdate = "Triggers.InsteadOfUpdate";
        public const string Type = "Triggers.Type";
    }

    #endregion
}
